package com.totsp.crossword.view;

import java.util.ArrayList;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;

import com.totsp.crossword.shortyz.R;

public class SeparatedListAdapter extends BaseAdapter {

	private final ArrayList<Adapter> sections = new ArrayList<Adapter>();
	private final ArrayAdapter<String> headers;
	private final static int TYPE_SECTION_HEADER = 0;

	public SeparatedListAdapter(Context context) {
		headers = new ArrayAdapter<String>(context, R.layout.puzzle_list_header);
	}

	public void addSection(String section, Adapter adapter) {
		this.headers.add(section);
		this.sections.add(adapter);
	}

	public Object getItem(int position) {
		int section = 0;
		for(Adapter adapter : this.sections) {
			int size = adapter.getCount() + 1;

			// check if position inside this section
			if(position == 0) return headers.getItem(section);
			if(position < size) return adapter.getItem(position - 1);

			// otherwise jump into next section
			position -= size;
			section++;
		}
		return null;
	}

	public int getCount() {
		// total together all sections, plus one for each section header
		int total = 0;
		for(Adapter adapter : this.sections)
			total += adapter.getCount() + 1;
		return total;
	}

	public int getViewTypeCount() {
//		// assume that headers count as one, then total all sections
//		int total = 1;
//		for(Adapter adapter : this.sections)
//			total += adapter.getViewTypeCount();
//		return total;
		return 2;
	}

	public int getItemViewType(int position) {
		for(Adapter adapter : this.sections) {
			
			int size = adapter.getCount() + 1;

			// check if position inside this section
			if(position == 0) return TYPE_SECTION_HEADER;
			if(position < size) return 1;

			// otherwise jump into next section
			position -= size;
			//type += adapter.getViewTypeCount();
		}
		return -1;
	}

	public boolean areAllItemsSelectable() {
		return false;
	}

	public boolean isEnabled(int position) {
		return (getItemViewType(position) != TYPE_SECTION_HEADER);
	}

	public View getView(int i, View view, ViewGroup group) {
		int sectionnum = 0;
		for(Adapter adapter : this.sections) {
			int size = adapter.getCount() + 1;

			// check if position inside this section
			if(i == 0) return headers.getView(sectionnum, view, group);
			if(i < size) return adapter.getView(i - 1, view, group);

			// otherwise jump into next section
			i -= size;
			sectionnum++;
		}
		return null;
	}

	public long getItemId(int position) {
		return position;
	}

}
